﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using KonyvKolcsonzes;

namespace Konyvkolcsonzo
{
    struct felhasznalo
    {
        public long id;
        public string nev;
        public string tel;
        public string email;
        public string csalad;
        public bool csaladtag;
    }
    class Felhasznalok : DAL
    {
        public List<felhasznalo> getFelhasznalo(string keresoBetu)
        {
            openConnection();
            string error = "";
            List<felhasznalo> nevsor = new List<felhasznalo>();
            SqlDataReader reader = executeReader("(select FelhasznaloID, FelhasznaloNev, FelhasznaloTelSzam, EmailCim, 'true' as Tag"
                + " from Felhasznalok where FelhasznaloID in (select * from Csaladtag) AND FelhasznaloNev like '%" + keresoBetu + "%')"
                + " union"
                + " (select FelhasznaloID, FelhasznaloNev, FelhasznaloTelSzam, EmailCim, 'false' from Felhasznalok  where FelhasznaloNev like '%" + keresoBetu + "%')"
                + " except"
                + " (select FelhasznaloID, FelhasznaloNev, FelhasznaloTelSzam, EmailCim, 'false'"
                + " from Felhasznalok where FelhasznaloID in (select * from Csaladtag)) ", ref error);
            while (reader.Read())
            {
                felhasznalo f;
                f.id = Convert.ToInt32(reader["FelhasznaloID"]);
                f.nev = Convert.ToString(reader["FelhasznaloNev"]);
                f.tel = Convert.ToString(reader["FelhasznaloTelSzam"]);
                f.email = Convert.ToString(reader["EmailCim"]);
                f.csalad = "";
                f.csaladtag = false;
                if (Convert.ToBoolean(reader["Tag"]))
                {
                    f.csalad = "✔";
                    f.csaladtag = true;
                }
                nevsor.Add(f);
            }
            closeConnection();
            return nevsor;
        }

        public string insertFelhasznalo(felhasznalo k)
        {
            openConnection();
            string error = executeInsertCommand("INSERT into Felhasznalok (FelhasznaloNev, FelhasznaloTelSzam, EmailCim) values  ('" + k.nev + "', '" + k.tel + "', '" + k.email + "')");
            closeConnection();

            //Csaladtag
            if (k.csaladtag)
            {
                openConnection();
                error = executeInsertCommand("insert into Csaladtag (FelhasznaloID) values (" + k.id + ")");
                closeConnection();
            }
            return error;
        }

        public string updateFelhasznalok(felhasznalo k)
        {
            deleteCsalad(k.id);
            openConnection();
            string error = executeUpdateCommand("update Felhasznalok set FelhasznaloNev = '" + k.nev + "', FelhasznaloTelSzam = '" + k.tel + "', EmailCim = '" + k.email + "' where felhasznaloID = '" + k.id + "' ");
            closeConnection();

            //Csaladtag
            if (k.csaladtag)
            {
                openConnection();
                error = executeUpdateCommand("insert into Csaladtag (FelhasznaloID) values (" + k.id + ")");
                closeConnection();
            }

            return error;
        }

        public string deleteFelhasznalok(long id)
        {
            deleteCsalad(id);
            deleteKolcsonzes(id);
            openConnection();
            string error = executeDeleteCommand("delete from Felhasznalok where FelhasznaloID = " + id);
            closeConnection();
            return error;
        }

        public string deleteCsalad(long id)
        {
            openConnection();
            string error = executeDeleteCommand("delete from Csaladtag where FelhasznaloID = " + id);
            closeConnection();
            return error;
        }

        public string deleteKolcsonzes(long id)
        {
            openConnection();
            string error = executeDeleteCommand("delete from Kikolcsonozve where FelhasznaloID = " + id);
            closeConnection();
            return error;
        }

        public felhasznalo getFelhasznalo(long id)
        {
            openConnection();
            string err = "";
            felhasznalo terit = new felhasznalo();
            SqlDataReader reader = executeReader("select FelhasznaloNev, FelhasznaloTelSzam, EmailCim from Felhasznalok where FelhasznaloID = " + id , ref err);
            terit.id = id;
            while (reader.Read())
            {
                terit.nev = Convert.ToString(reader["FelhasznaloNev"]);
                terit.tel = Convert.ToString(reader["FelhasznaloTelSzam"]);
                terit.email = Convert.ToString(reader["EmailCim"]);
            }
            closeConnection();

            //Csaladtag
            openConnection();
            reader = executeReader("select FelhasznaloID from Csaladtag where FelhasznaloID = " + id + "", ref err);
            terit.csaladtag = false;
            if (reader.Read())
            {
                terit.csaladtag = true;
            }
            closeConnection();

            return terit;
        }
    }
}
